package com.qidian.mes.md.controller;

import com.google.gson.Gson;
import com.qidian.mes.util.pojo.MESResult;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @Author 戴着假发的程序员
 * @Company 起点编程
 * @Time 2023/10/30 11:30
 * @Description
 */
@CrossOrigin
@RestController
public class FileUploadController {

    @Value("${file-server-dir}")
    private String fileServerDir; //  文件存储的文件夹目录
    @Value("${file-server-url}")
    private String fileServerUrl; // 文件服务器的访问地址
    @Value("${accessKey}")
    private String accessKey;
    @Value("${secretKey}")
    private String secretKey;
    @Value("${bucket}")
    private String bucket;
    @Value("${qiniu-url}")
    private String qiniuUrl;

    @PostMapping("/upload")
    public MESResult upload(@RequestParam(value = "uploadFile")MultipartFile uploadFile){
        // 将文件上传到云服务器
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration();
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
        UploadManager uploadManager = new UploadManager(cfg);
        // 生成上传凭证
        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);
        // 上传文件
        try {
            Response response = uploadManager.put(uploadFile.getBytes(), null, upToken);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);// 这里的has就是文件的名字。
            // 图片访问地址就是外链地址 + 图片名称
            return MESResult.ok(qiniuUrl + putRet.hash);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    };
//    @PostMapping("/upload")
//    public MESResult upload(@RequestParam(value = "uploadFile")MultipartFile uploadFile){
//        // 获取文件名
//        String filename = uploadFile.getOriginalFilename();
//        // 获取文件后缀
//        String ext = filename.substring(filename.lastIndexOf("."));
//        // 为了防止文件的名字重复，要随机的生成文件的物理名称。
//        // 生成文件的物理名，唯一，速度快。 可以使用UUID
//        filename = UUID.randomUUID().toString() + (new Random().nextInt(90) + 10) + ext;
//        // 将文件写到我们的目录目录中。
//        try {
//            uploadFile.transferTo(new File(fileServerDir + filename));
//            //  响应客户端，并且含带图片的访问地址
//            return MESResult.ok(fileServerUrl + filename);
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    };
}
